﻿Imports UtilPadrao
Imports Controle
Public Class frmUsuario

#Region "Variáveis"

    Private objUsuario As New Controle.ctrUsuario

    Private datUsuariosGrupos As New DataTable
    Private datModulos As New DataTable
    Private datEmpresas As New DataTable

#End Region

#Region "Eventos Formulário"

    Private Sub frmGrupoAcesso_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    End Sub

    Private Sub frmGrupoAcesso_alteraModo(ByVal eModoAtual As FronteiraPadrao.frmPadrao.eModo) Handles Me.alteraModo

        If (eModoAtual = eModo.eAguardando) Then
            Me.grpPrincipal.Enabled = False
            Me.grpEmpresas.Enabled = False
        Else
            Me.grpPrincipal.Enabled = True
            Me.grpEmpresas.Enabled = True
        End If

        Me.txtCodigo.Enabled = (eModoAtual = eModo.eAguardando)
        Me.btnCodigo.Enabled = (eModoAtual = eModo.eAguardando)

    End Sub

    Private Sub frmGrupoAcesso_limpaCampo() Handles Me.limpaCampo
        Me.limpar()
    End Sub

    Private Sub frmGrupoAcesso_cancelar(ByRef bCancel As Boolean) Handles Me.cancelar
        Me.epPadrao.Clear()
    End Sub

    Private Sub frmGrupoAcesso_excluir(ByRef bCancel As Boolean) Handles Me.excluir

        Try

            bCancel = True

            If Me.objUsuario.excluirUsuario(conversao.toInt32(Me.txtCodigo.Text)) Then
                bCancel = False
            End If

        Catch ex As Exception

        End Try

    End Sub

    Private Sub frmGrupoAcesso_gravar(ByRef bCancel As Boolean) Handles Me.gravar

        Try

            bCancel = True

            If Me.objUsuario.gravarUsuario(conversao.toInt32(Me.txtCodigo.Text),
                                           Me.txtNome.Text,
                                           Me.txtLogin.Text,
                                           Me.txtSenha.Text,
                                           Me.chkBloqueado.Checked,
                                           Me.datUsuariosGrupos,
                                           Me.datEmpresas) Then

                MyBase.chave = Me.objUsuario.codigoUsuario

                MessageBox.Show("Usuário salvo com sucesso.", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Information)

                bCancel = False
            Else
                Me.Mensagens = Me.objUsuario.retornaMensagensValidacao
            End If

        Catch ex As Exception
            MessageBox.Show(ex.Message, Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try

    End Sub

    Private Sub frmGrupoAcesso_carregaDados(ByVal iChave As Integer) Handles Me.carregaDados

        Dim drUsuario As DataRow = Nothing
        Dim objSeguranca As New UtilPadrao.Criptografia

        Try

            If iChave > 0 Then

                drUsuario = Me.objUsuario.selecionarUsuarioCodigo(iChave)

                If Not drUsuario Is Nothing Then

                    Me.txtCodigo.Text = iChave
                    Me.txtNome.Text = conversao.vazioParaNulo(drUsuario.Item("nome"))
                    Me.txtLogin.Text = conversao.vazioParaNulo(drUsuario.Item("login"))
                    Me.txtSenha.Text = conversao.vazioParaNulo(objSeguranca.descriptografar(drUsuario.Item("senha")))
                    Me.chkBloqueado.Checked = conversao.toBoolean(drUsuario.Item("bloqueado"))

                    Me.datModulos = Me.objUsuario.selecionarModulosGrupos()
                    Me.datUsuariosGrupos = Me.objUsuario.selecionarUsuariosGrupos(iChave)
                    Me.datEmpresas = Me.objUsuario.selecionarUsuarioEmpresas(iChave)

                    Me.dgvModulos.DataSource = Me.datModulos
                    Me.dgvEmpresas.DataSource = Me.datEmpresas

                Else
                    MessageBox.Show("Identificador inválido.", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                    MyBase.chave = 0
                End If

            End If

        Catch ex As Exception
            MessageBox.Show(ex.Message, Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try

    End Sub

    Private Sub frmUsuario_inserir(ByRef bCancel As Boolean) Handles Me.inserir

        Try

            Me.datModulos = Me.objUsuario.selecionarModulosGrupos()
            Me.datUsuariosGrupos = Me.objUsuario.selecionarUsuariosGrupos(0)
            Me.datEmpresas = Me.objUsuario.selecionarUsuarioEmpresas(0)

            Me.dgvModulos.DataSource = Me.datModulos
            Me.dgvEmpresas.DataSource = Me.datEmpresas

        Catch ex As Exception
            MessageBox.Show(ex.Message, Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try

    End Sub

    Private Sub frmUsuario_setarProvedorDeErros() Handles Me.setarProvedorDeErros

        Dim iContadorMensagens As Int32
        Dim sMensagem As String

        For iContadorMensagens = 0 To MyBase.Mensagens(FronteiraPadrao.frmPadrao.eMensagem.Codigo).Count - 1

            sMensagem = MyBase.Mensagens(FronteiraPadrao.frmPadrao.eMensagem.Mensagem).item(iContadorMensagens)

            Select Case MyBase.Mensagens(FronteiraPadrao.frmPadrao.eMensagem.Codigo).item(iContadorMensagens)
                Case ctrUsuario.eMensagens.NOME, ctrUsuario.eMensagens.NOME
                    Me.epPadrao.SetError(Me.txtNome, sMensagem)
                Case ctrUsuario.eMensagens.LOGIN, ctrUsuario.eMensagens.LOGIN
                    Me.epPadrao.SetError(Me.txtLogin, sMensagem)
                Case ctrUsuario.eMensagens.SENHA, ctrUsuario.eMensagens.SENHA
                    Me.epPadrao.SetError(Me.txtSenha, sMensagem)
                Case ctrUsuario.eMensagens.CADASTRADO, ctrUsuario.eMensagens.CADASTRADO
                    Me.epPadrao.SetError(Me.txtLogin, sMensagem)
            End Select

        Next

    End Sub

    Private Sub frmUsuario_limpaProvedorDeErros() Handles Me.limpaProvedorDeErros
        Me.epPadrao.Clear()
    End Sub

    Private Sub dgvEmpresas_CellClick(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvEmpresas.CellClick, dgvEmpresas.CellEnter

        Dim bPermitido As Boolean = False
        Dim iCodEmpresa As Int32 = 0

        Try

            bPermitido = conversao.toBoolean(Me.dgvEmpresas.CurrentRow.Cells("permitido").Value)
            iCodEmpresa = conversao.toInt32(Me.dgvEmpresas.CurrentRow.Cells("codEmpresa").Value)

            Me.limparModulos()

            If bPermitido Then
                Me.grpModulos.Enabled = True
                Me.atualizarModulosGrupos(iCodEmpresa)
            Else
                Me.grpModulos.Enabled = False
                Me.limparModulosGrupos(iCodEmpresa)
            End If

        Catch ex As Exception
            MessageBox.Show(ex.Message, Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try

    End Sub

    Private Sub dgvEmpresas_CellContentClick(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvEmpresas.CellContentClick

        Dim bPermitido As Boolean = False
        Dim iCodEmpresa As Int32 = 0

        Try

            If e.RowIndex >= 0 AndAlso Me.dgvEmpresas.CurrentCell.OwningColumn.Name = "permitido" Then
                Me.dgvEmpresas.CommitEdit(DataGridViewDataErrorContexts.Commit)
            End If

            bPermitido = conversao.toBoolean(Me.dgvEmpresas.CurrentRow.Cells("permitido").Value)
            iCodEmpresa = conversao.toInt32(Me.dgvEmpresas.CurrentRow.Cells("codEmpresa").Value)

            Me.limparModulos()

            If bPermitido Then
                Me.grpModulos.Enabled = True
                Me.atualizarModulosGrupos(iCodEmpresa)
            Else
                Me.grpModulos.Enabled = False
                Me.limparModulosGrupos(iCodEmpresa)
            End If

        Catch ex As Exception
            MessageBox.Show(ex.Message, Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try

    End Sub

    Private Sub limparModulos()

        For Each drDados As DataRow In Me.datModulos.Rows
            drDados.BeginEdit()
            drDados.Item("permitido") = False
            drDados.Item("codEmpresa") = 0
            drDados.Item("codGrupo") = 0
            drDados.Item("nome") = String.Empty
            drDados.EndEdit()
        Next

        Me.datModulos.AcceptChanges()

    End Sub

    Private Sub limparModulosGrupos(ByVal iCodEmpresa As Int32)

        For Each drDados As DataRow In Me.datUsuariosGrupos.Rows
            If conversao.toInt32(drDados.Item("codEmpresa")) = iCodEmpresa Then
                drDados.BeginEdit()
                drDados.Item("permitido") = False
                drDados.EndEdit()
            End If
        Next

        Me.datUsuariosGrupos.AcceptChanges()

    End Sub

    Private Sub atualizarModulosGrupos(ByVal iCodEmpresa As Int32)

        Dim drModulo As DataRow()

        For Each drDados As DataRow In Me.datModulos.Rows

            drModulo = Me.datUsuariosGrupos.Select("codModulo = " & drDados.Item("codModulo") & " AND codEmpresa = " & iCodEmpresa & " AND permitido = 1")
            If drModulo.Length > 0 Then
                drDados.BeginEdit()
                drDados.Item("permitido") = True
                drDados.Item("codEmpresa") = iCodEmpresa
                drDados.Item("codGrupo") = drModulo(0)("codGrupo")
                drDados.Item("nome") = drModulo(0)("nome")
                drDados.EndEdit()
            End If

        Next

    End Sub

    Private Sub atualizarUsuariosModulos(ByVal iCodEmpresa As Int32,
                                         ByVal bPermitido As Boolean,
                                         ByVal iCodGrupo As Int32,
                                         ByVal sDescGrupo As String,
                                         ByVal iCodModulo As Int32,
                                         ByVal sDescModulo As String)

        Dim drModulo As DataRow()

        drModulo = Me.datUsuariosGrupos.Select("codModulo = " & iCodModulo & " AND codEmpresa = " & iCodEmpresa)
        If drModulo.Length > 0 Then
            drModulo(0).BeginEdit()
            drModulo(0).Item("permitido") = bPermitido
            drModulo(0).Item("codEmpresa") = iCodEmpresa
            drModulo(0).Item("codGrupo") = iCodGrupo
            drModulo(0).Item("nome") = sDescGrupo
            drModulo(0).EndEdit()
        Else
            Me.datUsuariosGrupos.Rows.Add({iCodModulo, sDescModulo, bPermitido, iCodGrupo, sDescGrupo, iCodEmpresa})
        End If

        Me.datUsuariosGrupos.AcceptChanges()

    End Sub

#End Region

#Region "Eventos"

    Private Sub btnCodigo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCodigo.Click

        Dim datUsuarios As New DataTable
        Dim objAuxiliar As Object()

        Try

            datUsuarios = Me.objUsuario.selecionarUsuarios

            If datUsuarios.Rows.Count > 0 Then

                objAuxiliar = FronteiraPadrao.frmPesquisa.executarPesquisaGenerica("Selecionar Usuário",
                                                                                    Me.objUsuario.sCamposTabela,
                                                                                    Me.objUsuario.sCamposDemonstracao,
                                                                                    Me.objUsuario.sCamposChave,
                                                                                    Me.objUsuario.sTitulosColunas,
                                                                                    datUsuarios)
                If Not Verificador.seVazio(objAuxiliar) Then
                    MyBase.chave = objAuxiliar(0)
                End If

            Else
                MessageBox.Show("Não existem usuários cadastrados para a pesquisa.",
                                Me.Text,
                                MessageBoxButtons.OK,
                                MessageBoxIcon.Exclamation)
            End If

        Catch ex As Exception
            MessageBox.Show(ex.Message, Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try


    End Sub

    Private Sub txtCodigo_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtCodigo.LostFocus

        Try

            If conversao.toInt32(Me.txtCodigo.Text) > 0 Then
                Me.chave = conversao.toInt32(Me.txtCodigo.Text)
            Else
                MyBase.limpaCampos(Me)
            End If

        Catch ex As Exception
            MessageBox.Show(ex.Message, Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try

    End Sub

    Private Sub dgvModulos_CellContentClick(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvModulos.CellContentClick

        Dim iCodEmpresa As Int32 = 0
        Dim bPermitido As Boolean = False
        Dim iCodGrupo As Int32 = 0
        Dim sDescGrupo As String = String.Empty
        Dim sDescModulo As String = String.Empty
        Dim iCodModulo As Int32 = 0

        Try

            Me.dgvModulos.CommitEdit(DataGridViewDataErrorContexts.Commit)

            Select Case dgvModulos.CurrentCell.OwningColumn.Name

                Case "SELECIONAR"
                    Me.selecionarGrupoAcesso()

                Case "permitidoModulo"

                    If conversao.toBoolean(Me.dgvModulos.CurrentRow.Cells("permitidoModulo").Value) Then
                        Me.selecionarGrupoAcesso()
                    Else
                        Me.dgvModulos.CurrentRow.Cells("codGrupo").Value = 0
                        Me.dgvModulos.CurrentRow.Cells("nome").Value = String.Empty
                    End If

                    iCodEmpresa = conversao.toInt32(Me.dgvEmpresas.CurrentRow.Cells("codEmpresa").Value)
                    bPermitido = conversao.toBoolean(Me.dgvModulos.CurrentRow.Cells("permitidoModulo").Value)
                    iCodGrupo = conversao.toInt32(Me.dgvModulos.CurrentRow.Cells("codGrupo").Value)
                    sDescGrupo = conversao.nuloParaVazio(Me.dgvModulos.CurrentRow.Cells("nome").Value)
                    iCodModulo = conversao.toInt32(Me.dgvModulos.CurrentRow.Cells("codModulo").Value)
                    sDescModulo = conversao.nuloParaVazio(Me.dgvModulos.CurrentRow.Cells("descricao").Value)

                    Me.atualizarUsuariosModulos(iCodEmpresa,
                                                bPermitido,
                                                iCodGrupo,
                                                sDescGrupo,
                                                iCodModulo,
                                                sDescModulo)
            End Select

        Catch ex As Exception
            MessageBox.Show(ex.Message, Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try

    End Sub

#End Region

#Region "Métodos"

    Private Sub limpar()

        MyBase.limpaCampos(Me)
        Me.datUsuariosGrupos.Rows.Clear()
        Me.datEmpresas.Rows.Clear()
        Me.datModulos.Rows.Clear()

    End Sub

    Private Sub selecionarGrupoAcesso()

        Dim iCodModulo As Int32 = 0
        Dim datGrupos As New DataTable
        Dim objGrupos As New Controle.ctrGrupoAcesso
        Dim objAuxiliar As Object()

        iCodModulo = conversao.toInt32(Me.dgvModulos.CurrentRow.Cells("codModulo").Value)

        datGrupos = objGrupos.selecionarGrupoAcesso(iCodModulo, 0)

        If datGrupos.Rows.Count > 0 Then

            objAuxiliar = FronteiraPadrao.frmPesquisa.executarPesquisaGenerica("Selecionar Grupos de Aceso",
                                                                                objGrupos.sCamposTabela,
                                                                                objGrupos.sCamposDemonstracao,
                                                                                objGrupos.sCamposChave,
                                                                                objGrupos.sTitulosColunas,
                                                                                datGrupos)
            If Not Verificador.seVazio(objAuxiliar) Then
                Me.dgvModulos.CurrentRow.Cells("codGrupo").Value = objAuxiliar(0)
                Me.dgvModulos.CurrentRow.Cells("nome").Value = objAuxiliar(1)
                Me.dgvModulos.CurrentRow.Cells("permitidoModulo").Value = True
            Else
                Me.dgvModulos.CurrentRow.Cells("codGrupo").Value = 0
                Me.dgvModulos.CurrentRow.Cells("nome").Value = String.Empty
                Me.dgvModulos.CurrentRow.Cells("permitidoModulo").Value = False
            End If

        Else
            MessageBox.Show("Não existem grupos de acesso cadastrados para a pesquisa.",
                            Me.Text,
                            MessageBoxButtons.OK,
                            MessageBoxIcon.Exclamation)

            Me.dgvModulos.CurrentRow.Cells("codGrupo").Value = 0
            Me.dgvModulos.CurrentRow.Cells("nome").Value = String.Empty
            Me.dgvModulos.CurrentRow.Cells("permitidoModulo").Value = False

        End If

    End Sub

#End Region

End Class
